package platzerworld.kegeln.gui.chart;

import java.util.ArrayList;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import platzerworld.kegeln.common.ConstantsIF;
import platzerworld.kegeln.vo.ergebnis.ErgebnisVO;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint.Align;

/**
 * 
 * @author platzerg
 *
 */
public class KegelverwaltungLineChart extends AbstractKegelverwaltungChart
		implements ConstantsIF {
	private static final long serialVersionUID = -9221632798479376739L;

	public String getName() {
		return "Line - Chart";
	}

	public String getDesc() {
		return "Line-Chart Durchschnittsergebnisse Kegeln";
	}

	public Intent execute(Context context, int chartIndikator) {
		String[] titles = new String[] { "Gesamt" };
		List<double[]> alleSpiele = new ArrayList<double[]>();
		List<double[]> alleErgebnisse = new ArrayList<double[]>();
		String chartTitel = "";

		double[] spiele = new double[data.size()];
		double[] ergebnisdata = new double[data.size()];

		for (int i = 0; i < data.size(); i++) {
			spiele[i] = i + 1;
			ErgebnisVO ergebnis = ((ErgebnisVO) data.get(i));
			if (CHART_INDIKATOR_GESAMT == chartIndikator) {
				ergebnisdata[i] = ergebnis.gesamtergebnis;
			} else if (CHART_INDIKATOR_DG_1 == chartIndikator) {
				ergebnisdata[i] = ergebnis.volle251 + ergebnis.abraeumen251;
			} else if (CHART_INDIKATOR_DG_2 == chartIndikator) {
				ergebnisdata[i] = ergebnis.volle252 + ergebnis.abraeumen252;
			}

		}
		alleSpiele.add(spiele);
		alleErgebnisse.add(ergebnisdata);

		int[] colors = new int[] { Color.BLUE };

		PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE };

		XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
		int length = renderer.getSeriesRendererCount();
		for (int i = 0; i < length; i++) {
			((XYSeriesRenderer) renderer.getSeriesRendererAt(i))
					.setFillPoints(true);
		}

		if (CHART_INDIKATOR_GESAMT == chartIndikator) {
			setChartSettings(renderer, "Durchschnitt", "Spieltag", "", 0, 20,
					380, 480, Color.LTGRAY, Color.LTGRAY);
			renderer.setPanLimits(new double[] { 1, 20, 310, 530 });
			renderer.setZoomLimits(new double[] { 0, 0, 310, 530 });
			chartTitel = "Kegeldurchschnitt Gesamt";
		} else if (CHART_INDIKATOR_DG_1 == chartIndikator) {
			setChartSettings(renderer, "Durchschnitt", "Spieltag", "", 0, 20,
					120, 170, Color.LTGRAY, Color.LTGRAY);
			renderer.setPanLimits(new double[] { 1, 20, 100, 180 });
			renderer.setZoomLimits(new double[] { 0, 0, 100, 180 });
			chartTitel = "Kegeldurchschnitt 1.DG";
		} else if (CHART_INDIKATOR_DG_2 == chartIndikator) {
			setChartSettings(renderer, "Durchschnitt", "Spieltag", "", 0, 20,
					50, 80, Color.LTGRAY, Color.LTGRAY);
			renderer.setPanLimits(new double[] { 1, 20, 35, 105 });
			renderer.setZoomLimits(new double[] { 0, 0, 35, 105 });
			chartTitel = "Kegeldurchschnitt 2.DG";
		}

		renderer.setXLabels(20);
		renderer.setYLabels(30);
		renderer.setShowGrid(true);
		renderer.setXLabelsAlign(Align.CENTER);
		renderer.setYLabelsAlign(Align.RIGHT);
		renderer.setDisplayChartValues(true);

		Intent intent = ChartFactory.getLineChartIntent(context,
				buildDataset(titles, alleSpiele, alleErgebnisse), renderer,
				chartTitel);
		return intent;
	}

	@Override
	public void putData(List<ErgebnisVO> data) {
		this.data = data;
	}

}
